608060405234801562000010575f80fd5b5060405162002a0038038062002a0083398181016040528101906200003691906200022a565b8282815f9081620000489190620004ef565b5080600190816200005a9190620004ef565b50505080600881905550505050620005d3565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b620000ce8262000086565b810181811067ffffffffffffffff82111715620000f057620000ef62000096565b5b80604052505050565b5f620001046200006d565b9050620001128282620000c3565b919050565b5f67ffffffffffffffff82111562000134576200013362000096565b5b6200013f8262000086565b9050602081019050919050565b5f5b838110156200016b5780820151818401526020810190506200014e565b5f8484015250505050565b5f6200018c620001868462000117565b620000f9565b905082815260208101848484011115620001ab57620001aa62000082565b5b620001b88482856200014c565b509392505050565b5f82601f830112620001d757620001d66200007e565b5b8151620001e984826020860162000176565b91505092915050565b5f819050919050565b6200020681620001f2565b811462000211575f80fd5b50565b5f815190506200022481620001fb565b92915050565b5f805f6060848603121562000244576200024362000076565b5b5f84015167ffffffffffffffff8111156200026457620002636200007a565b5b6200027286828701620001c0565b935050602084015167ffffffffffffffff8111156200029657620002956200007a565b5b620002a486828701620001c0565b9250506040620002b78682870162000214565b9150509250925092565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200031057607f821691505b602082108103620003265762000325620002cb565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026200038a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200034d565b6200039686836200034d565b95508019841693508086168417925050509392505050565b5f819050919050565b5f620003d7620003d1620003cb84620001f2565b620003ae565b620001f2565b9050919050565b5f819050919050565b620003f283620003b7565b6200040a6200040182620003de565b84845462000359565b825550505050565b5f90565b6200042062000412565b6200042d818484620003e7565b505050565b5b818110156200045457620004485f8262000416565b60018101905062000433565b5050565b601f821115620004a3576200046d816200032c565b62000478846200033e565b8101602085101562000488578190505b620004a062000497856200033e565b83018262000432565b50505b505050565b5f82821c905092915050565b5f620004c55f1984600802620004a8565b1980831691505092915050565b5f620004df8383620004b4565b9150826002028217905092915050565b620004fa82620002c1565b67ffffffffffffffff81111562000516576200051562000096565b5b620005228254620002f8565b6200052f82828562000458565b5f60209050601f83116001811462000565575f841562000550578287015190505b6200055c8582620004d2565b865550620005cb565b601f19841662000575866200032c565b5f5b828110156200059e5784890151825560018201915060208501945060208101905062000577565b86831015620005be5784890151620005ba601f891682620004b4565b8355505b6001600288020188555050505b505050505050565b61241f80620005e15f395ff3fe608060405234801561000f575f80fd5b50600436106100fe575f3560e01c806395d89b4111610095578063d5abeb0111610064578063d5abeb01146102ba578063d85d3d27146102d8578063e985e9c5146102f4578063ef2d174614610324576100fe565b806395d89b4114610234578063a22cb46514610252578063b88d4fde1461026e578063c87b56dd1461028a576100fe565b806323b872dd116100d157806323b872dd1461019c57806342842e0e146101b85780636352211e146101d457806370a0823114610204576100fe565b806301ffc9a71461010257806306fdde0314610132578063081812fc14610150578063095ea7b314610180575b5f80fd5b61011c600480360381019061011791906118d1565b610342565b6040516101299190611916565b60405180910390f35b61013a6103a2565b60405161014791906119b9565b60405180910390f35b61016a60048036038101906101659190611a0c565b610431565b6040516101779190611a76565b60405180910390f35b61019a60048036038101906101959190611ab9565b61044c565b005b6101b660048036038101906101b19190611af7565b610462565b005b6101d260048036038101906101cd9190611af7565b610561565b005b6101ee60048036038101906101e99190611a0c565b610580565b6040516101fb9190611a76565b60405180910390f35b61021e60048036038101906102199190611b47565b610591565b60405161022b9190611b81565b60405180910390f35b61023c610647565b60405161024991906119b9565b60405180910390f35b61026c60048036038101906102679190611bc4565b6106d7565b005b61028860048036038101906102839190611d2e565b6106ed565b005b6102a4600480360381019061029f9190611a0c565b61070a565b6040516102b191906119b9565b60405180910390f35b6102c2610815565b6040516102cf9190611b81565b60405180910390f35b6102f260048036038101906102ed9190611e4c565b61081b565b005b61030e60048036038101906103099190611e93565b6108ce565b60405161031b9190611916565b60405180910390f35b61032c61095c565b6040516103399190611b81565b60405180910390f35b5f634906490660e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061039b575061039a8261096c565b5b9050919050565b60605f80546103b090611efe565b80601f01602080910402602001604051908101604052809291908181526020018280546103dc90611efe565b80156104275780601f106103fe57610100808354040283529160200191610427565b820191905f5260205f20905b81548152906001019060200180831161040a57829003601f168201915b5050505050905090565b5f61043b82610a4d565b5061044582610ad3565b9050919050565b61045e8282610459610b0c565b610b13565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036104d2575f6040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016104c99190611a76565b60405180910390fd5b5f6104e583836104e0610b0c565b610b25565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461055b578382826040517f64283d7b00000000000000000000000000000000000000000000000000000000815260040161055293929190611f2e565b60405180910390fd5b50505050565b61057b83838360405180602001604052805f8152506106ed565b505050565b5f61058a82610a4d565b9050919050565b5f8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610602575f6040517f89c62b640000000000000000000000000000000000000000000000000000000081526004016105f99190611a76565b60405180910390fd5b60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b60606001805461065690611efe565b80601f016020809104026020016040519081016040528092919081815260200182805461068290611efe565b80156106cd5780601f106106a4576101008083540402835291602001916106cd565b820191905f5260205f20905b8154815290600101906020018083116106b057829003601f168201915b5050505050905090565b6106e96106e2610b0c565b8383610d30565b5050565b6106f8848484610462565b61070484848484610e99565b50505050565b606061071582610a4d565b505f60065f8481526020019081526020015f20805461073390611efe565b80601f016020809104026020016040519081016040528092919081815260200182805461075f90611efe565b80156107aa5780601f10610781576101008083540402835291602001916107aa565b820191905f5260205f20905b81548152906001019060200180831161078d57829003601f168201915b505050505090505f6107ba61104b565b90505f8151036107ce578192505050610810565b5f825111156108025780826040516020016107ea929190611f9d565b60405160208183030381529060405292505050610810565b61080b84611061565b925050505b919050565b60085481565b60085461082860076110c7565b10610868576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085f90612030565b60405180910390fd5b5f61087360076110c7565b905061087f33826110d3565b61088981836110f0565b610893600761114a565b7fd9dc24857f317ed9abbbb42e920ede0104231eb1d3d70236a74887ffaf159868816040516108c29190611b81565b60405180910390a15050565b5f60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b5f61096760076110c7565b905090565b5f7f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a3657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a465750610a458261115e565b5b9050919050565b5f80610a58836111c7565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610aca57826040517f7e273289000000000000000000000000000000000000000000000000000000008152600401610ac19190611b81565b60405180910390fd5b80915050919050565b5f60045f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f33905090565b610b208383836001611200565b505050565b5f80610b30846111c7565b90505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614610b7157610b708184866113bf565b5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610bfc57610bb05f855f80611200565b600160035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825403925050819055505b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614610c7b57600160035f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8460025f8681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4809150509392505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610da057816040517f5b08ba18000000000000000000000000000000000000000000000000000000008152600401610d979190611a76565b60405180910390fd5b8060055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610e8c9190611916565b60405180910390a3505050565b5f8373ffffffffffffffffffffffffffffffffffffffff163b1115611045578273ffffffffffffffffffffffffffffffffffffffff1663150b7a02610edc610b0c565b8685856040518563ffffffff1660e01b8152600401610efe94939291906120a0565b6020604051808303815f875af1925050508015610f3957506040513d601f19601f82011682018060405250810190610f3691906120fe565b60015b610fba573d805f8114610f67576040519150601f19603f3d011682016040523d82523d5f602084013e610f6c565b606091505b505f815103610fb257836040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401610fa99190611a76565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461104357836040517f64a0ae9200000000000000000000000000000000000000000000000000000000815260040161103a9190611a76565b60405180910390fd5b505b50505050565b606060405180602001604052805f815250905090565b606061106c82610a4d565b505f61107661104b565b90505f8151116110945760405180602001604052805f8152506110bf565b8061109e84611482565b6040516020016110af929190611f9d565b6040516020818303038152906040525b915050919050565b5f815f01549050919050565b6110ec828260405180602001604052805f81525061154c565b5050565b8060065f8481526020019081526020015f20908161110e91906122c6565b507ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce78260405161113e9190611b81565b60405180910390a15050565b6001815f015f828254019250508190555050565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b5f60025f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b808061123857505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561136a575f61124784610a4d565b90505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156112b157508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b80156112c457506112c281846108ce565b155b1561130657826040517fa9fbf51f0000000000000000000000000000000000000000000000000000000081526004016112fd9190611a76565b60405180910390fd5b811561136857838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b8360045f8581526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b6113ca838383611567565b61147d575f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361143e57806040517f7e2732890000000000000000000000000000000000000000000000000000000081526004016114359190611b81565b60405180910390fd5b81816040517f177e802f000000000000000000000000000000000000000000000000000000008152600401611474929190612395565b60405180910390fd5b505050565b60605f600161149084611627565b0190505f8167ffffffffffffffff8111156114ae576114ad611c0a565b5b6040519080825280601f01601f1916602001820160405280156114e05781602001600182028036833780820191505090505b5090505f82602001820190505b600115611541578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8581611536576115356123bc565b5b0494505f85036114ed575b819350505050919050565b6115568383611778565b6115625f848484610e99565b505050565b5f8073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561161e57508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806115df57506115de84846108ce565b5b8061161d57508273ffffffffffffffffffffffffffffffffffffffff1661160583610ad3565b73ffffffffffffffffffffffffffffffffffffffff16145b5b90509392505050565b5f805f90507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310611683577a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008381611679576116786123bc565b5b0492506040810190505b6d04ee2d6d415b85acef810000000083106116c0576d04ee2d6d415b85acef810000000083816116b6576116b56123bc565b5b0492506020810190505b662386f26fc1000083106116ef57662386f26fc1000083816116e5576116e46123bc565b5b0492506010810190505b6305f5e1008310611718576305f5e100838161170e5761170d6123bc565b5b0492506008810190505b612710831061173d576127108381611733576117326123bc565b5b0492506004810190505b606483106117605760648381611756576117556123bc565b5b0492506002810190505b600a831061176f576001810190505b80915050919050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036117e8575f6040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016117df9190611a76565b60405180910390fd5b5f6117f483835f610b25565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611866575f6040517f73c6ac6e00000000000000000000000000000000000000000000000000000000815260040161185d9190611a76565b60405180910390fd5b505050565b5f604051905090565b5f80fd5b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6118b08161187c565b81146118ba575f80fd5b50565b5f813590506118cb816118a7565b92915050565b5f602082840312156118e6576118e5611874565b5b5f6118f3848285016118bd565b91505092915050565b5f8115159050919050565b611910816118fc565b82525050565b5f6020820190506119295f830184611907565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561196657808201518184015260208101905061194b565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61198b8261192f565b6119958185611939565b93506119a5818560208601611949565b6119ae81611971565b840191505092915050565b5f6020820190508181035f8301526119d18184611981565b905092915050565b5f819050919050565b6119eb816119d9565b81146119f5575f80fd5b50565b5f81359050611a06816119e2565b92915050565b5f60208284031215611a2157611a20611874565b5b5f611a2e848285016119f8565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611a6082611a37565b9050919050565b611a7081611a56565b82525050565b5f602082019050611a895f830184611a67565b92915050565b611a9881611a56565b8114611aa2575f80fd5b50565b5f81359050611ab381611a8f565b92915050565b5f8060408385031215611acf57611ace611874565b5b5f611adc85828601611aa5565b9250506020611aed858286016119f8565b9150509250929050565b5f805f60608486031215611b0e57611b0d611874565b5b5f611b1b86828701611aa5565b9350506020611b2c86828701611aa5565b9250506040611b3d868287016119f8565b9150509250925092565b5f60208284031215611b5c57611b5b611874565b5b5f611b6984828501611aa5565b91505092915050565b611b7b816119d9565b82525050565b5f602082019050611b945f830184611b72565b92915050565b611ba3816118fc565b8114611bad575f80fd5b50565b5f81359050611bbe81611b9a565b92915050565b5f8060408385031215611bda57611bd9611874565b5b5f611be785828601611aa5565b9250506020611bf885828601611bb0565b9150509250929050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b611c4082611971565b810181811067ffffffffffffffff82111715611c5f57611c5e611c0a565b5b80604052505050565b5f611c7161186b565b9050611c7d8282611c37565b919050565b5f67ffffffffffffffff821115611c9c57611c9b611c0a565b5b611ca582611971565b9050602081019050919050565b828183375f83830152505050565b5f611cd2611ccd84611c82565b611c68565b905082815260208101848484011115611cee57611ced611c06565b5b611cf9848285611cb2565b509392505050565b5f82601f830112611d1557611d14611c02565b5b8135611d25848260208601611cc0565b91505092915050565b5f805f8060808587031215611d4657611d45611874565b5b5f611d5387828801611aa5565b9450506020611d6487828801611aa5565b9350506040611d75878288016119f8565b925050606085013567ffffffffffffffff811115611d9657611d95611878565b5b611da287828801611d01565b91505092959194509250565b5f67ffffffffffffffff821115611dc857611dc7611c0a565b5b611dd182611971565b9050602081019050919050565b5f611df0611deb84611dae565b611c68565b905082815260208101848484011115611e0c57611e0b611c06565b5b611e17848285611cb2565b509392505050565b5f82601f830112611e3357611e32611c02565b5b8135611e43848260208601611dde565b91505092915050565b5f60208284031215611e6157611e60611874565b5b5f82013567ffffffffffffffff811115611e7e57611e7d611878565b5b611e8a84828501611e1f565b91505092915050565b5f8060408385031215611ea957611ea8611874565b5b5f611eb685828601611aa5565b9250506020611ec785828601611aa5565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680611f1557607f821691505b602082108103611f2857611f27611ed1565b5b50919050565b5f606082019050611f415f830186611a67565b611f4e6020830185611b72565b611f5b6040830184611a67565b949350505050565b5f81905092915050565b5f611f778261192f565b611f818185611f63565b9350611f91818560208601611949565b80840191505092915050565b5f611fa88285611f6d565b9150611fb48284611f6d565b91508190509392505050565b7f4d617820737570706c7920726561636865642e204e6f206d6f726520746f6b655f8201527f6e732063616e206265206d696e7465642e000000000000000000000000000000602082015250565b5f61201a603183611939565b915061202582611fc0565b604082019050919050565b5f6020820190508181035f8301526120478161200e565b9050919050565b5f81519050919050565b5f82825260208201905092915050565b5f6120728261204e565b61207c8185612058565b935061208c818560208601611949565b61209581611971565b840191505092915050565b5f6080820190506120b35f830187611a67565b6120c06020830186611a67565b6120cd6040830185611b72565b81810360608301526120df8184612068565b905095945050505050565b5f815190506120f8816118a7565b92915050565b5f6020828403121561211357612112611874565b5b5f612120848285016120ea565b91505092915050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026121857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261214a565b61218f868361214a565b95508019841693508086168417925050509392505050565b5f819050919050565b5f6121ca6121c56121c0846119d9565b6121a7565b6119d9565b9050919050565b5f819050919050565b6121e3836121b0565b6121f76121ef826121d1565b848454612156565b825550505050565b5f90565b61220b6121ff565b6122168184846121da565b505050565b5b818110156122395761222e5f82612203565b60018101905061221c565b5050565b601f82111561227e5761224f81612129565b6122588461213b565b81016020851015612267578190505b61227b6122738561213b565b83018261221b565b50505b505050565b5f82821c905092915050565b5f61229e5f1984600802612283565b1980831691505092915050565b5f6122b6838361228f565b9150826002028217905092915050565b6122cf8261192f565b67ffffffffffffffff8111156122e8576122e7611c0a565b5b6122f28254611efe565b6122fd82828561223d565b5f60209050601f83116001811461232e575f841561231c578287015190505b61232685826122ab565b86555061238d565b601f19841661233c86612129565b5f5b828110156123635784890151825560018201915060208501945060208101905061233e565b86831015612380578489015161237c601f89168261228f565b8355505b6001600288020188555050505b505050505050565b5f6040820190506123a85f830185611a67565b6123b56020830184611b72565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffdfea264697066735822122014ea5fdb300992e536dad1d5d818f2943c842d34da6625499dac58a98795388964736f6c63430008180033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000000000000000a4d5320546f6b656e20320000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000054d53544b32000000000000000000000000000000000000000000000000000000